package com.easyexcle.demo.doc;


import cn.hutool.core.date.DateUtil;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.policy.HackLoopTableRenderPolicy;
import com.easyexcle.demo.doc.until.ExportWordUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ClassUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Author: lkz
 * @Title: Test
 * @Description: TODO
 * @Date: 2023/5/26 11:22
 */

@RestController
public class TestDoc {


    /**
     * easypoi 动态表格合并
     * @param response
     * @param request
     * 出现问题 合并的单元格数据填充是，单元格数据错位，解决方法手动对其前一个，因为在查找数据的时候默认找到上面的单元格竖线导致
     */
    @GetMapping("test2")
    public void testList(HttpServletResponse response,HttpServletRequest request){
        Map<String, Object> params = new HashMap<>();
        ClassPathResource classPathResource = new ClassPathResource("template/schemePDList.docx");
        String templatePath= classPathResource.getPath();
        params.put("studyName","研究课题");
        params.put("scheNum","001");
        params.put("coreName","上海长江医院");
        params.put("coreCode","90983");
        params.put("study","主要研究者");
        params.put("cra","主要CRA");
        List<Map<String,Object>> dataList=new ArrayList<>();
        for(int i=1;i<=100;i++){
            Map<String,Object> map=new ConcurrentHashMap<>();
            map.put("pdNum","pd"+i);
            map.put("subjectCode","sub"+00+i);
            map.put("pdTypeName","type类型"+i);
            map.put("pdDesc","描述<"+i+">:"+"尽可能收到难上加难斯金纳那倒是那份尽可能数据库放哪手机扩大江南世家电脑撒就能发手机卡代发年级双打卡那就是你复健科独食难肥金卡是能发金卡打撒");
            map.put("correctAction","补救措施");
            map.put("createName","张柳"+i);
            map.put("signTime",DateUtil.format(new Date(),"yyyy-MM-dd"));
            dataList.add(map);
        }

        params.put("dataList",dataList);
        Long time = System.currentTimeMillis();
        // 生成的word格式
        String formatSuffix = ".docx";
        // 拼接后的文件名
        String fileName = "word表格"+time + formatSuffix;//文件名  带后缀
        //导出word
        ExportWordUtils.exportWord(templatePath, fileName, params, request, response);
    }

    /**
     * easypoi 表格数据填充
     * @param response
     * @param request
     */
    @GetMapping("testdoc")
    public void test(HttpServletResponse response,HttpServletRequest request){


        Map<String, Object> params = new HashMap<>();

        ClassPathResource classPathResource = new ClassPathResource("template/subjectPDInfo.docx");
        String templatePath= classPathResource.getPath();
        params.put("projectName","项目名称");
        params.put("sponsor","申办方名称这是一个测试的数据看看长度是欧少会不会有数据");//生成文件名
        params.put("projectCode","项目编码-kkk-kkjjkkk");//生成文件名
        params.put("coreName","蒋树声南京市桑海常山三家以上是你");//生成文件名
        params.put("coreCode","中心code");//生成文件名
        params.put("mainStudy","主要研究者");//生成文件名
        params.put("nameSmall","lkj");//生成文件名
        params.put("medicalCode","kjsh2jjj9988");//生成文件名
        params.put("pdTypeName","方案威海");//生成文件名
        params.put("psDesc","好聚好散的金黄金黄计划书大家好睡觉的时候，积极上进电视好聚好散大家好,hshdsah不合适对不上是的是的不是的上班的话十八大十八大手" +
                "打吧十八大对不上八点上班电话手表等哈十八大爸爸手打巴萨不" +
                "都是都不上班都收不到不杀对吧设计的吧就撒不都是博大精深八点上班大沙坝大撒把登记,好聚好散的金黄金黄计划书大家好睡觉的时候，" +
                "积极上进电视好聚好散大家好,hshdsah不合适对不上是的是的不是的上班的话十八大十八大手打吧十八大对不上八点上班电话" +
                "手表等哈十八大爸爸手打巴萨不都是都不上班都收不到不杀对吧-稍等哈稍等哈大SSD哈水电费公司电话发吧三打哈噶大概洒哈工大哈哥啥都好说噶活动嘎达干哈广东撒大花洒规定更好的干撒好的" +
                "不大好进化萨更待何时打靶机has撒大沙地哈师大萨哈登记卡花洒较大花洒花洒等哈时间的哈手机号手机打合计萨哈登记卡萨杜撒雨水大皇帝收到货手打0000" +
                "好聚好散的金黄金黄计划书大家好睡觉的时候，积极上进电视好聚好散大家好,hshdsah不合适对不上是的是的不是的上班的话十八大十八大手\" +\n" +
                "                \"打吧十八大对不上八点上班电话手表等哈十八大爸爸手打巴萨不\" +\n" +
                "                \"都是都不上班都收不到不杀对吧设计的吧就撒不都是博大精深八点上班大沙坝大撒把登记,好聚好散的金黄金黄计划书大家好睡觉的时候，\" +\n" +
                "                \"积极上进电视好聚好散大家好,hshdsah不合适对不上是的是的不是的上班的话十八大十八大手打吧十八大对不上八点上班电话\" +\n" +
                "                \"手表等哈十八大爸爸手打巴萨不都是都不上班都收不到不杀对吧-稍等哈稍等哈大SSD哈水电费公司电话发吧三打哈噶大概洒哈工大哈哥啥都好说噶活动嘎达干哈广东撒大花洒规定更好的干撒好的\" +\n" +
                "                \"不大好进化萨更待何时打靶机has撒大沙地哈师大萨哈登记卡花洒较大花洒花洒等哈时间的哈手机号手机打合计萨哈登记卡萨杜撒雨水大皇帝收到货手打");//生成文件名
        params.put("pdEffect","造成硬性");//生成文件名
        params.put("action","预防措施");//生成文件名
        params.put("CRA","CRA");//生成文件名
        params.put("craDate", DateUtil.format(new Date(),"yyyy-MM-dd"));//生成文件名
        params.put("studySign","");//生成文件名
        params.put("stuDate",DateUtil.format(new Date(),"yyyy-MM-dd"));//生成文件名
        params.put("ethicSign","签名");//生成文件名
        params.put("ethicDate","ethicDate");//生成文件名
        Long time = System.currentTimeMillis();
        // 生成的word格式
        String formatSuffix = ".docx";
        // 拼接后的文件名
        String fileName = "测试项目"+time + formatSuffix;//文件名  带后缀
        //导出word
        ExportWordUtils.exportWord(templatePath, fileName, params, request, response);
    }

    @GetMapping("tl")
    public void testPOITl(HttpServletResponse response){


        String basePath= ClassUtils.getDefaultClassLoader().getResource("").getPath()+"template/";
        String path =basePath+"tl.docx";
        Long time = System.currentTimeMillis();
        // 生成的word格式
        String formatSuffix = ".docx";
        // 拼接后的文件名
        String fileName = "tl方案"+time + formatSuffix;

        Map<String, Object> params = new HashMap<>();

        List<Map<String,Object>> dataList=new ArrayList<>();
        for(int i=1;i<=100;i++){
            Map<String,Object> map=new ConcurrentHashMap<>();
            map.put("pdNum","pd"+i);
            map.put("subjectCode","sub"+00+i);
            map.put("pdTypeName","type类型"+i);
            map.put("pdDesc","描述<"+i+">:"+"尽可能收到难上加难斯金纳那倒是那份尽可能数据库放哪手机扩大江南世家电脑撒就能发手机卡代发年级双打卡那就是你复健科独食难肥金卡是能发金卡打撒");
            map.put("correctAction","补救措施");
            map.put("createName","张柳"+i);
            map.put("signTime",DateUtil.format(new Date(),"yyyy-MM-dd"));
            dataList.add(map);
        }

        params.put("dataList",dataList);

        // 渲染表格
        HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
        Configure build = Configure.newBuilder().bind("dataList", policy).build();
        XWPFTemplate template = XWPFTemplate.compile(path, build).render(new HashMap<String, Object>() {{
            put("dataList", dataList);
            put("studyName","研究课题");
            put("scheNum","001");
            put("coreName","上海长江医院");
            put("coreCode","90983");
            put("study","主要研究者");
            put("cra","主要CRA");
            put("header","这是页眉");//可以将页眉中的变量 ${header} 替换为 "这是页眉"
            put("footer","这是页脚"); //将页脚中的变量 ${footer} 替换为 "这是页脚"
        }});
        // 设置页眉页脚

        try {
            // 设置强制下载不打开
            response.setContentType("application/force-download");
            // 设置文件名
            response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
            OutputStream out = response.getOutputStream();
            template.write(out);
            out.flush();
            out.close();
            template.close();
        }catch (Exception E){

        }

    }


    /**
     *
     */


}
